package ali;

/**
 *
 * @author wxh
 */
public class Solution_15 {

	// 思路：从低到高逐位相加，如果当前位和超过 1010，则向高位进一位，如果两个数字位数不同，则对位数较短的数字进行补零操作
	//  8 6 0 4 3
	// +  5 5 8 2
	// -----------
	//  9 1 6 2 5

	/**
	 * tips：
	 * char转成int：- '0'
	 * int转char：+ '0'
	 */


	public String addStrings(String num1, String num2) {

		int p1 = num1.length() - 1;
		int p2 = num2.length() - 1;
		int add = 0; // 维护当前是否有进位
		StringBuffer strb = new StringBuffer();
		while (p1 >= 0 || p2 >= 0 || add > 0) { // 从末尾到开头逐位相加
			int n1 = p1 >= 0 ? num1.charAt(p1) - '0' : 0; // 如果当前指针为0或者被减为负数，则进行补零操作
			int n2 = p2 >= 0 ? num2.charAt(p2) - '0' : 0;
			int result = n1 + n2 + add;
			strb.append(result % 10); //取个位数
			add = result / 10; //取十位数

			// 前进一位
			p1--;
			p2--;
		}

		// 计算完以后的答案需要翻转过来
		strb.reverse();
		return strb.toString();

	}

}